#ifndef _CANARY2_UTIL_CONCEPTS_H_
#define _CANARY2_UTIL_CONCEPTS_H_

#include <type_traits>

namespace wilson::util
{
    template<typename T, template<typename...> typename Primary>
    struct is_specialization_of_helper : ::std::false_type
    {
    };

    template<template<typename...> typename Primary, typename... Args>
    struct is_specialization_of_helper<Primary<Args...>, Primary> : ::std::true_type
    {
    };

    template<typename T, template<typename...> typename Primary>
    concept is_specialization_of = !!is_specialization_of_helper<T, Primary>{};
}

#endif
